import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)
import axios from 'axios'
import echarts from 'echarts'
Vue.prototype.$echarts = echarts
Vue.prototype.$store = store
Vue.config.productionTip = false

Vue.prototype.$http = axios

import moment from "moment";
Vue.prototype.moment = moment;

function clone(obj){
  var o, obj;
  if (obj.constructor == Object){
    o = new obj.constructor();
  }else{
    o = new obj.constructor(obj.valueOf());
  }
  for(var key in obj){
    if ( o[key] != obj[key] ){
      if ( typeof(obj[key]) == 'object' ){
        o[key] = clone(obj[key]);
      }else{
        o[key] = obj[key];
      }
    }
  }
  o.toString = obj.toString;
  o.valueOf = obj.valueOf;
  return o;
}

Vue.prototype.clone = clone

//  定义异步请求 拦截器 所有的axios请求 发送之前 都会携带 headers.authentication  token数据
axios.interceptors.request.use(config => {
    console.log(config)
    config.headers.Authentication = window.sessionStorage.getItem("Authentication")
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }

)


// http response 拦截器
axios.interceptors.response.use(
  response => {
    //  对响应数据 处理
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 403:
          // 返回 403 转到登录页面
          //跳转到主页
          window.sessionStorage.removeItem("Authentication")
          router.replace({ name: "login" });
      }
    }

    return Promise.reject(error.response.data)   // 返回接口返回的错误信息
  });

//  定义路由拦截
// 语法 ：router.beforeEach（）一般用来做一些进入页面的限制。比如没有登录，就不能进入某些页面，
// 只有登录了之后才有权限查看某些页面。  to 表示需要访问的目标router  next 表示可以访问

/*router.beforeEach((to,from,next)=>{
  if(to.name != 'login'){
    if(window.sessionStorage.getItem("Authentication")){
      next()
    }else if(from.name !='login'){
      next({path:'/'})
    }
  }else{
    next()
  }
})*/
router.beforeEach((to, from, next) => {
  if(to.name == 'login'){
    next();
  }else{
    let _token = store.state.userInfo.Authentication;
    // let _token = window.sessionStorage.getItem("Authentication");
    if(_token){
      next();
    }else if(from.name !='login'){
      next({path:"/"});
    }
  }
});


new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
